// ts的基本数据类型
var num = 88;
var knum;
knum = 100;
// 字符串类型定义
var bus = "公交车";
var myname = "你好";
var dd = "\u4F60\u597D".concat(bus);
console.log(dd);
// 布尔类型
var flag = true;
var myflag = false;
console.log(flag);
// any 类型 (任意类型)
var sta;
var saf; //没有声明类型和赋值的 就是any类型
sta = 12;
sta = "123";
sta = true;
//数组类型
var arr = [1, 2, 3];
arr[3] = 123;
var list = ["1", "2", "3"];
var mylist = ["13", 123, true, [1, 2, 3]]; //任意类型的数组
var kklist = [1, 3, "435", "345"];
var ff = [12, 3, 5, 6, "123", true];
var myfflist = ["1", 2, true];
// 元组 Tuple
// 元组类型允许表示一个已知元素数量和类型的数组，各元素的类型不必相同
var myx;
myx = ["12", true, 13];
var myTuple = ["12", { name: 1 }, true, 123, [1, 2, 123]];
console.log(myTuple);
console.log(myTuple[0]);
// enum(枚举)类型是对JavaScript标准数据类型的一个补充
var Color;
(function(Color) {
    Color[Color["Red"] = 3] = "Red";
    Color[Color["Green"] = 4] = "Green";
    Color[Color["Blue"] = 5] = "Blue";
})(Color || (Color = {}));
console.log(Color.Red); //3
console.log(Color.Green); //4
var colorName = Color[4];
console.log(colorName);
var c;
(function(c) {
    c["name"] = "\u5F20\u4E09";
    c[c["age"] = 18] = "age";
    c["sex"] = "\u7537";
})(c || (c = {}));
console.log(c.name);
// ts的函数
var kfn = function(a, b) {};
var kfn1 = function() {};
// ts的函数 参数不能直接省略
// ts 省略参数 加?  b?:string   可省略参数 设计到函数的后面的参数
var kfn2 = function(a, b, c) {
    if (a === void 0) { a = 1; }
    console.log(a);
    console.log(b);
    console.log(c);
};
kfn2(12);
// 某种程度上来说，void类型像是与any类型相反，它表示没有任何类型
// void类型 接在函数名后  代表没有返回值
function myfn() {
    var x = 11;
    var y = 22;
    //  return 88 规定了void 函数就不能有返回值、
}
// 默认函数返回undefined
console.log(myfn());
//Never never类型表示的是那些永不存在的值的类型
// never 类型 一般代表函数不能执行完成
// function hsay():never{
//   let x=11;
//   let y=22;
//   // 抛出错误
//   throw new Error("函数出错了");
//   let z=22;
// }
// console.log(hsay())
// undefined 和null 数据类型
var fh = undefined;
var kks;
var mysa = null;
// 类型断言
// let ksss:any="this is a string";
// console.log(ksss.substring(0,3))
var strnum = "131677";
console.log(strnum.substring(0, 3));
// 俩种类型断言
var mystr = strnum.substring(0, 3);
var ccc = strnum.substring(0, 3);
console.log(mystr);
console.log(ccc);
// object 类型
var obj = {
    name: "1",
    age: 2
};
console.log(obj.name);
// ts 对象 不能访问不存在的属性
// console.log(obj.sex)
// 描述对象的数据类型
var obj2 = {
    name: "zhang",
    age: 18,
    sex: true
};
// ts 开发 推荐使用let 和const  
// let 和const 和var的区别
// let 和const 不能重复声明
// let 和const 产生块级作用域
// let 和const不存在变量提升
// let 和const 产生暂时性死区
// const 赋值常量   声明后无法从新赋值
var xx = 11;
// let xx=22; //let 和const 不能重复声明
function sdd() {
    // console.log(x)//x不存在变量提升
    // console.log(x)//使用let命令声明变量之前，该变量都是不可用的。这在语法上，称为“暂时性死区”
    console.log(yy); //undefined
    var x = 88;
    var yy = 99;
}
if (true) {
    var xx_1 = 11; //局部变量   产生块级作用域{}
}